Specifying the `async_mode` parameter seems to have been a workaround for
packaging on Windows and macOS.  If not given, flask_socketio.SocketIO will
probe for an available asynchronous model, e.g. `eventlet`, and otherwise gets
stuck if `gevent-socketio` is not available.

c.f. https://github.com/onionshare/onionshare/commit/ec7fa4ef16c9e1ba6028ee927c23f76c399a17a6
and  https://github.com/onionshare/onionshare/issues/1510

diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py
index 64844b5..7e1b095 100644
--- a/cli/onionshare_cli/web/web.py
+++ b/cli/onionshare_cli/web/web.py
@@ -164,10 +164,10 @@ class Web:
         elif self.mode == "chat":
             if self.common.verbose:
                 self.socketio = SocketIO(
-                    async_mode="gevent", logger=True, engineio_logger=True
+                    logger=True, engineio_logger=True
                 )
             else:
-                self.socketio = SocketIO(async_mode="gevent")
+                self.socketio = SocketIO()
             self.socketio.init_app(self.app)
             self.chat_mode = ChatModeWeb(self.common, self)
 
